package datos.gestores;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

import datos.entidades.Cliente;

public class GestorDatosCliente implements GestorDatos {

	private static int cantClientes;
	private static List <Cliente> clientes;
	private File dataFile;
	
	public GestorDatosCliente (String filePath) {				 // Constructor de la clase.
		System.out.println(filePath);
		clientes = new ArrayList <Cliente>();
		cantClientes = 0;
		this.dataFile = new File (filePath);
    }
	
    public GestorDatosCliente () {
    }

    public void set (int idx, Object cliente) {
    	
    	clientes.set(idx, (Cliente) cliente);
    }

    public boolean remove (Object cliente) {
    	
    	boolean exito;
    	exito = clientes.remove((Cliente) cliente);
    	if (exito == true)
    		setCantClientes(getCantClientes()-1);
    	return exito;
    }

    public void remove (int idx) {
    	
    	clientes.remove(idx);
    	setCantClientes(getCantClientes()-1);
    }

    public Object get (int idx) {
        
    	Object cliente;
    	
        cliente = clientes.get(idx);
    	return cliente;
    }

    public boolean add (Object cliente) {
    	boolean exito;
    	
    	exito = clientes.add((Cliente) cliente);
    	if (exito == true)
    		setCantClientes(getCantClientes()+1);
    	
    	return exito;
    }

    public void listar () {
    	
        Iterator<Cliente> iter = clientes.iterator();
        
        while (iter.hasNext())
          System.out.println(iter.next());
    }

    public void loadData () throws IOException {	 // Carga en memoria la info contenida en el archivo de clientes.
        Scanner input = new Scanner (dataFile);
        cantClientes = input.nextInt();
    	for (int i = 0 ; i < cantClientes ; i++ ) {
			Cliente nuevoCliente = new Cliente();
			nuevoCliente.setIdCliente(input.nextInt());
			nuevoCliente.setCUIT(input.next());
			input.findInLine(PAT);
			while (!input.hasNext(PAT)) {
				nuevoCliente.addRazonSocial(input.next());
			}			
			input.findInLine(PAT);			
			clientes.add(nuevoCliente);
    	}
    }

    public void saveData () {
    }

 // ****************************************************************************************************************************************//
 // ** METODOS ADICIONALES DEL GESTOR
 // ****************************************************************************************************************************************//

    public int indexOf (Object cliente) {
    	int idx;
    	
    	idx = clientes.indexOf((Cliente) cliente);
    	
        return idx;
    }
	
    public static void setCantClientes(int cantClientes) {
		GestorDatosCliente.cantClientes = cantClientes;
	}

	public static int getCantClientes() {
		return cantClientes;
	}

	public static void setClientes(List <Cliente> clientes) {
		GestorDatosCliente.clientes = clientes;
	}

	public static List <Cliente> getClientes() {
		return clientes;
	}

     public void getIdClientes(List <String> idClientes) {
         for (int i = 0 ; i < clientes.size() ; ++i)
        	 idClientes.add(i, Integer.toString(clientes.get(i).getIdCliente()));
         
     }

 }



